home *** CD-ROM | disk | FTP | other *** search
/ Amiga Collections: Franz PD / Franz PD Disk #026 (19xx)(Amiga User Group Deutschland e.V.).zip / Franz PD Disk #026 (19xx)(Amiga User Group Deutschland e.V.).adf / Vokabelstar / VokabelPrg.Dat < prev    next >
Text File  |  1988-12-10  |  35KB  |  991 lines

  1. VOKABELSTAR: '(Version 3.01)
  2.  
  3. ON ERROR GOTO Fehlerbearbeitung
  4.  
  5. DECLARE FUNCTION OpenFont& LIBRARY
  6. LIBRARY "graphics.library"
  7. LIBRARY "intuition.library"
  8.  
  9. DIM vokabel$(1,300),vokabel(300),reihenfolge(300),kursor%(29)
  10. ende=1:einfueg=1:bisEnde=1:anzeige=1:fehlerw=1:tippen=1:von%=1
  11. ON MOUSE GOSUB Mauswahl
  12. GOSUB Initmenu
  13. ON MENU GOSUB Menuwahl
  14. MENU ON
  15.  
  16. kursor:  
  17. LOCATE 1,1 : zeile%=1:spalte%=1:nummer%=1:Anfang%=1
  18. GET (0,0)-(7,7),kursor%
  19. PUT (0,0),kursor%,PRESET
  20. GET (0,0)-(7,7),kursor%
  21. CLS                                       
  22. SCREEN 1,640,256,2,2
  23.  
  24. '****************************************************
  25.  
  26. HAUPTPROGRAMM:   '(Version 1.10)
  27.  
  28. WINDOW 1,"Vokabelstar",(0,0)-(631,186),30,1
  29.  
  30. MENU 3,0,0:MENU 4,0,0
  31. GOSUB InitHauptmenue
  32. MOUSE ON:phase%=1:Menueauswahl=0
  33. wart:IF Menueauswahl=0 THEN wart
  34. MOUSE OFF
  35. ON Menueauswahl GOSUB VOKABELEDITOR,LERNEN,,Schluss
  36. GOTO HAUPTPROGRAMM
  37.  
  38. '#####
  39.  
  40. InitHauptmenue:
  41.   COLOR 2,1:CLS
  42.   Ueberschrift$="Hauptmenu":GOSUB Ueberschrift
  43.   LOCATE 7,35:PRINT "Eingabe"
  44.   LOCATE 9,35:PRINT "Abfrage"
  45.   LOCATE 11,35:PRINT "Test"
  46.   LOCATE 13,35:PRINT "Ende"
  47. RETURN
  48.  
  49. Hauptmenueauswahl:
  50.   IF mausx>272 AND mausx<320 THEN
  51.     IF mausy>48 AND mausy<56 THEN Menueauswahl=1
  52.     IF mausy>64 AND mausy<72 THEN Menueauswahl=2
  53.     IF mausy>80 AND mausy<88 THEN Menueauswahl=3
  54.     IF mausy>96 AND mausy<104 THEN Menueauswahl=4
  55.   END IF
  56. RETURN
  57.  
  58. '************************************************************
  59.  
  60. LERNEN:    '(Version 2.0)
  61.  
  62. phase%=2:wrong=0:MENU 2,2,1
  63. WINDOW 1,"Vokabel-Star",(0,0)-(631,186),22,1
  64. COLOR 2,1:CLS
  65. Ueberschrift$="Lernen":GOSUB Ueberschrift
  66. GOSUB LernenMenu
  67.  
  68. MOUSE ON
  69. warte:
  70.  GOTO warte
  71.  
  72. Beginn: 
  73. MOUSE OFF:MENU 2,2,0
  74. IF VokKap=1 THEN
  75.   von%=Kapitel+1
  76.   FOR a=ende TO Kapitel+1 STEP -1
  77.     IF RIGHT$(vokabel$(0,a),1)=":" THEN Kapit=a
  78.   NEXT
  79.   bis%=Kapit-1:IF bis%<von% THEN bis%=ende
  80. END IF
  81. KapAnz=0
  82. FOR a=von% TO bis%
  83.   IF RIGHT$(vokabel$(0,a),1)=":" THEN KapAnz=KapAnz+1
  84. NEXT
  85.   GOSUB initbild
  86. abfragen: 
  87.   GOSUB zufallreihenfolge
  88.   FOR qq=1 TO bis%+1-von%-KapAnz
  89.     GOSUB Abfragroutine
  90.   NEXT qq
  91. IF fehler=0 THEN LERNEN
  92. Fehlspeichfrag:
  93. CALL Filerequester(3,"Fehler-Vokabeln abspeichern?","unter dem Namen (mit Schublade):",Fehlerdatei$," Ja ","Nein")
  94. IF request=2 THEN fehlerwiederh
  95. GOSUB Fehlerspeichern
  96. IF fehlerw=0 THEN LERNEN
  97.  
  98. fehlerwiederh:
  99.   GOSUB fehlerreihenfolge
  100.   wrong=fehler
  101.   GOSUB initbild
  102.   LOCATE 2,40:PRINT "Fehlerwiederholung"
  103.   FOR qq=1 TO wrong
  104.     GOSUB Abfragroutine
  105.   NEXT qq
  106. IF fehlerw=0 OR fehler=0 THEN LERNEN ELSE GOTO fehlerwiederh  
  107.  
  108. '#######
  109. LernenMenu:
  110. IF bisEnde=1 THEN bis%=ende
  111. LOCATE 5,5:PRINT "Vokabel";SPC(15);"von";SPC(13);"bis";SPC(16);"Ende":GOSUB VonBisPrint
  112. IF bisEnde=1 THEN AREA(488,32):AREA(488,40):AREA(520,40):AREA(520,32):AREAFILL 1
  113. LOCATE 8,5:PRINT "Kapitel":LINE (184,52)-(520,68),0,b
  114. IF VokKap=0 THEN AREA(32,32):AREA(32,40):AREA(88,40):AREA(88,32):AREAFILL 1 ELSE AREA (32,56):AREA(32,64):AREA(88,64):AREA(88,56):AREAFILL 1
  115. IF RIGHT$(vokabel$(0,Kapitel),1)><":" THEN
  116.   Kapitel=0
  117.   FOR a=ende TO 1 STEP -1
  118.     IF RIGHT$(vokabel$(0,a),1)=":" THEN Kapitel=a
  119.   NEXT
  120. END IF
  121. LOCATE 8,25:PRINT vokabel$(0,Kapitel)
  122. LOCATE 11,5:PRINT "Anzeige";SPC(25);"Fremdsprache     Deutsch"
  123. IF anzeige=0 THEN AREA(288,80):AREA(384,80):AREA(384,88):AREA(288,88):AREAFILL 1 ELSE AREA(424,80):AREA(480,80):AREA(480,88):AREA(424,88):AREAFILL 1
  124. LOCATE 13,5:PRINT "Fehlerwiederholung"SPC(23);"Ja     Nein"
  125. IF fehlerw=1 THEN AREA(360,96):AREA(376,96):AREA(376,104):AREA(360,104):AREAFILL 1 ELSE AREA(416,96):AREA(448,96):AREA(448,104):AREA(416,104):AREAFILL 1
  126. LOCATE 15,5:PRINT "Tippen";SPC(35);"Ja     Nein"
  127. IF tippen=1 THEN AREA(360,112):AREA(376,112):AREA(376,120):AREA(360,120):AREAFILL 1 ELSE AREA(416,112):AREA(448,112):AREA(448,120):AREA(416,120):AREAFILL 1
  128. LOCATE 17,5:PRINT "'Zum Teil richtig'=Fehler"SPC(16)"Ja     Nein"
  129. IF zTrF=1 THEN AREA(360,128):AREA(376,128):AREA(376,136):AREA(360,136):AREAFILL 1 ELSE AREA(416,128):AREA(448,128):AREA(448,136):AREA(416,136):AREAFILL 1
  130. CALL CreateBox (21,30," OK "):CALL CreateBox (21,40,"Abbruch")
  131.  
  132. FOR a=256 TO 384 STEP 128
  133.   FOR b=0 TO 48 STEP 24
  134.     AREA (a+b,30):AREA (a+b+8,30):AREA(a+b+4,30-4):AREAFILL
  135.     AREA (a+b,40):AREA (a+b+8,40):AREA(a+b+4,40+4):AREAFILL
  136.   NEXT
  137. NEXT
  138. AREA (530,57):AREA(540,57):AREA(535,52):AREAFILL
  139. AREA (530,63):AREA(540,63):AREA(535,68):AREAFILL
  140. RETURN
  141.  
  142. VonBisPrint:
  143.   IF bis%>ende THEN bis%=ende
  144.   IF von%<1 THEN von%=1
  145.   IF von%>bis% THEN
  146.     IF bh=-1 THEN bis%=von% ELSE von%=bis%
  147.   END IF
  148.   vh=INT(von%/100):vz=INT((von%-100*vh)/10):ve=INT(von%-(100*vh+10*vz))
  149.   bh=INT(bis%/100):bz=INT((bis%-100*bh)/10):be=INT(bis%-(100*bh+10*bz))
  150.   LOCATE 5,32:PRINT vh;vz;ve;
  151.   LOCATE 5,48:PRINT bh;bz;be;
  152. RETURN
  153.  
  154. taste:
  155. IF (mausy>=26 AND mausy<=30) OR (mausy>=40 AND mausy<=44) THEN
  156.   a=2
  157.   FOR b=0 TO 48 STEP 24
  158.     IF mausy<=30 THEN IF mausx>=256+b AND mausx<=256+b+8 THEN von%=von%+10^a
  159.     IF mausy>=40 THEN IF mausx>=256+b AND mausx<=256+b+8 THEN von%=von%-10^a
  160.    a=a-1
  161.   NEXT
  162.   a=2
  163.   FOR b=0 TO 48 STEP 24
  164.     IF mausy<=30 THEN IF mausx>=384+b AND mausx<=384+b+8 THEN bis%=bis%+10^a:bh=-1
  165.     IF mausy>=40 THEN IF mausx>=384+b AND mausx<=384+b+8 THEN bis%=bis%-10^a:bh=-1
  166.    a=a-1
  167.   NEXT
  168.   IF bisEnde=1 AND bh=-1 THEN bisEnde=0:AREA(488,32):AREA(488,40):AREA(520,40):AREA(520,32):AREAFILL 1
  169.   IF VokKap=1 THEN VokKap=0:AREA(32,32):AREA(32,40):AREA(88,40):AREA(88,32):AREAFILL 1:AREA (32,56):AREA(32,64):AREA(88,64):AREA(88,56):AREAFILL 1
  170.   GOSUB VonBisPrint
  171. END IF
  172. IF mausy>=32 AND mausy<=40 THEN
  173.   IF mausx>=488 AND mausy<=520 THEN
  174.     IF bisEnde=0 THEN bisEnde=1 ELSE RETURN
  175.     AREA(488,32):AREA(488,40):AREA(520,40):AREA(520,32):AREAFILL 1  
  176.     bis%=ende:GOSUB VonBisPrint
  177.     IF VokKap=1 THEN VokKap=0:AREA(32,32):AREA(32,40):AREA(88,40):AREA(88,32):AREAFILL 1:AREA (32,56):AREA(32,64):AREA(88,64):AREA(88,56):AREAFILL 1
  178.   END IF
  179. END IF
  180. IF mausx>=32 AND mausx<=88 THEN
  181.   IF mausy>=32 AND mausy<=40 THEN
  182.     IF VokKap=1 THEN VokKap=0:AREA(32,32):AREA(32,40):AREA(88,40):AREA(88,32):AREAFILL 1:AREA (32,56):AREA(32,64):AREA(88,64):AREA(88,56):AREAFILL 1
  183.   END IF
  184.   IF mausy>=56 AND mausy<=64 THEN
  185.     IF Kapitel=0 THEN RETURN
  186.     IF VokKap=0 THEN VokKap=1:AREA(32,32):AREA(32,40):AREA(88,40):AREA(88,32):AREAFILL 1:AREA (32,56):AREA(32,64):AREA(88,64):AREA(88,56):AREAFILL 1
  187.   END IF
  188. END IF
  189. IF mausx>=530 AND mausx<=540 THEN
  190.   IF Kapitel=0 THEN BEEP:RETURN
  191.   IF mausy>=52 AND mausy<=57 THEN
  192.     FOR a=1 TO Kapitel-1
  193.       IF RIGHT$(vokabel$(0,a),1)=":" THEN Kapitel=a
  194.     NEXT
  195.     LOCATE 8,25:PRINT SPACE$(40):LOCATE 8,25:PRINT vokabel$(0,Kapitel)
  196.   END IF
  197.   IF mausy>=63 AND mausy<=68 THEN
  198.     FOR a=ende TO Kapitel+1 STEP -1
  199.       IF RIGHT$(vokabel$(0,a),1)=":" THEN Kapitel=a
  200.     NEXT
  201.     LOCATE 8,25:PRINT SPACE$(40):LOCATE 8,25:PRINT vokabel$(0,Kapitel)
  202.   END IF
  203.   IF VokKap=0 THEN VokKap=1:AREA(32,32):AREA(32,40):AREA(88,40):AREA(88,32):AREAFILL 1:AREA (32,56):AREA(32,64):AREA(88,64):AREA(88,56):AREAFILL 1
  204. END IF
  205. IF mausy>=80 AND mausy<=88 THEN
  206.   IF mausx>=288 AND mausx<=480 THEN
  207.     IF mausx<=384 THEN IF anzeige=1 THEN anzeige=0 ELSE RETURN
  208.     IF mausx>=424 THEN IF anzeige=0 THEN anzeige=1 ELSE RETURN
  209.     IF mausx<=384 OR mausx>424 THEN AREA(288,80):AREA(384,80):AREA(384,88):AREA(288,88):AREAFILL 1:AREA(424,80):AREA(480,80):AREA(480,88):AREA(424,88):AREAFILL 1
  210.   END IF
  211. END IF
  212. IF mausx>=360 AND mausy<=448 THEN
  213.   IF mausx<=376 THEN
  214.     IF mausy>=96 AND mausy<=104 THEN IF fehlerw=0 THEN fehlerw=1 ELSE RETURN
  215.     IF mausy>=112 AND mausy<=120 THEN IF tippen=0 THEN tippen=1 ELSE RETURN
  216.     IF mausy>=128 AND mausy<=136 THEN IF zTrF=0 THEN zTrF=1 ELSE RETURN
  217.   END IF
  218.   IF mausx>=416 THEN
  219.     IF mausy>=96 AND mausy<=104 THEN IF fehlerw=1 THEN fehlerw=0 ELSE RETURN
  220.     IF mausy>=112 AND mausy<=120 THEN IF tippen=1 THEN tippen=0 ELSE RETURN
  221.     IF mausy>=128 AND mausy<=136 THEN IF zTrF=1 THEN zTrF=0 ELSE RETURN
  222.   END IF
  223.   IF mausx<=376 OR mausx>=416 THEN
  224.     IF mausy>=96 AND mausy<=104 THEN AREA(360,96):AREA(376,96):AREA(376,104):AREA(360,104):AREAFILL 1:AREA(416,96):AREA(448,96):AREA(448,104):AREA(416,104):AREAFILL 1
  225.     IF mausy>=112 AND mausy<=120 THEN AREA(360,112):AREA(376,112):AREA(376,120):AREA(360,120):AREAFILL 1:AREA(416,112):AREA(448,112):AREA(448,120):AREA(416,120):AREAFILL 1
  226.     IF mausy>=128 AND mausy<=136 THEN AREA(360,128):AREA(376,128):AREA(376,136):AREA(360,136):AREAFILL 1:AREA(416,128):AREA(448,128):AREA(448,136):AREA(416,136):AREAFILL 1
  227.   END IF
  228. END IF
  229. IF mausy>=156 AND mausy<=172 THEN
  230.   IF mausx>=224 AND mausx<=272 THEN RETURN Beginn
  231.   IF mausx>=304 AND mausx<=376 THEN RETURN backtoHaupt
  232. END IF
  233. RETURN
  234.  
  235. backtoHaupt:
  236. RETURN HAUPTPROGRAMM
  237.  
  238. initbild:
  239.   COLOR 2,1:CLS
  240.   PRINT:PRINT "  Lernen"
  241.   IF tippen=1 THEN
  242.     LINE (595,8)-(611,160),0,b
  243.     LOCATE 22,63:PRINT "Richtig:     0 %"
  244.   END IF
  245.   LOCATE 22,45:PRINT "Fehler: 0":fehler=0
  246.   LOCATE 22,2:PRINT "Vokabeln:";
  247.   IF wrong=0 THEN PRINT bis%+1-von%-KapAnz ELSE PRINT wrong
  248.   LOCATE 22,23:PRINT "Abgefragt: 0"
  249.   LINE(36,36)-(364,50),0,b
  250.   LINE(212,100)-(538,114),0,b
  251. RETURN  
  252.  
  253. zufallreihenfolge:
  254.   FOR qq=1 TO ende:vokabel(qq)=1:NEXT qq
  255.   FOR qq=von% TO bis%
  256.     IF RIGHT$(vokabel$(0,qq),1)=":" THEN vokabel(qq)=1 ELSE vokabel(qq)=0
  257.   NEXT qq
  258.   RANDOMIZE TIMER
  259.   FOR qq=1 TO bis%+1-von%-KapAnz
  260.    nochmal: 
  261.     zufall=INT(RND*(bis%+1-von%))+von%
  262.     IF vokabel(zufall)=0 THEN reihenfolge(qq)=zufall:vokabel(zufall)=1 ELSE GOTO nochmal
  263.   NEXT qq
  264. RETURN
  265.  
  266. fehlerreihenfolge:
  267.   RANDOMIZE TIMER
  268.   FOR qq=1 TO fehler
  269.     nochmal2:
  270.     zufall=INT(RND*ende)+1
  271.     IF vokabel(zufall)=0 THEN reihenfolge(qq)=zufall:vokabel(zufall)=1 ELSE GOTO nochmal2
  272.   NEXT qq
  273. RETURN
  274.  
  275. Abfragroutine:
  276.     LOCATE 6,6:PRINT vokabel$(anzeige,reihenfolge(qq))
  277.     IF tippen=0 THEN
  278.       WHILE INKEY$=""
  279.       WEND
  280.       LOCATE 22,32:PRINT qq
  281.       GOTO richtiganzeige
  282.     END IF
  283.     uebersetzung$="":LOCATE 14,28:zeile%=14:spalte%=28:punktx=216:punkty=104:PUT (punktx,punkty),kursor%:GOSUB eing
  284.     
  285.     ko=0:vergl=0
  286.     IF uebersetzung$=vokabel$(ABS(anzeige-1),reihenfolge(qq)) THEN richtig
  287.     IF uebersetzung$="" THEN fehler=fehler+1:vokabel(reihenfolge(qq))=0:GOTO balken
  288.     stelle(0)=INSTR(uebersetzung$,",")
  289.     IF stelle(0)=0 THEN stelle$(0)=uebersetzung$:GOTO nochens
  290.     stelle$(0)=LEFT$(uebersetzung$,stelle(0)-1)
  291.     uebersetzung$=MID$(uebersetzung$,stelle(0)+1)
  292.   kommasa:
  293.     ko=ko+1
  294.     stelle(ko)=INSTR(uebersetzung$,",")
  295.     IF stelle(ko)=0 THEN stelle$(ko)=uebersetzung$:GOTO nochens
  296.     stelle$(ko)=LEFT$(uebersetzung$,stelle(ko)-1)
  297.     uebersetzung$=MID$(uebersetzung$,stelle(ko)+1)
  298.    GOTO kommasa
  299.    
  300.    nochens:
  301.     hilf$=vokabel$(ABS(anzeige-1),reihenfolge(qq))
  302.     stel(0)=INSTR(hilf$,",")
  303.     IF stel(0)=0 THEN stel$(0)=hilf$:GOTO vergleich
  304.     stel$(0)=LEFT$(hilf$,stel(0)-1)
  305.     hilf$=MID$(hilf$,stel(0)+1)
  306.     K=0
  307.    kommasb:
  308.     K=K+1
  309.     stel(K)=INSTR(hilf$,",")
  310.     IF stel(K)=0 THEN stel$(K)=hilf$:GOTO vergleich
  311.     stel$(K)=LEFT$(hilf$,stel(K)-1)
  312.     hilf$=MID$(hilf$,stel(K)+1)
  313.    GOTO kommasb
  314.    
  315.   vergleich:
  316.    vergl=-1
  317.    FOR a=0 TO ko
  318.      FOR b=0 TO K
  319.        IF stelle$(a)=stel$(b) THEN vergl=vergl+1
  320.      NEXT b
  321.    NEXT a
  322.    IF ko=K AND vergl=ko THEN richtig
  323.    IF vergl=-1 THEN falsch
  324.    IF ko<>K AND vergl=ko THEN teilrichtig
  325.    IF vergl>-1 AND vergl<ko THEN teilsteils
  326.  GOTO balken
  327.  
  328. richtig:
  329.   LOCATE 17,15:PRINT "Richtig!"
  330.   GOTO balken
  331. falsch:
  332.   LOCATE 17,15:PRINT "Falsch":fehler=fehler+1:vokabel(reihenfolge(qq))=0
  333.   GOTO balken
  334. teilrichtig:
  335.   LOCATE 17,15:PRINT "Zum Teil richtig"
  336.   IF zTrF=1 THEN fehler=fehler+1:vokabel(reihenfolge(qq))=0
  337.   GOTO balken
  338. teilsteils:
  339.   LOCATE 17,15:PRINT "Teils richtig, teils falsch":fehler=fehler+1:vokabel(reihenfolge(qq))=0
  340.   GOTO balken
  341.  
  342. balken:
  343.   LOCATE 22,52:PRINT fehler
  344.   LOCATE 22,32:PRINT qq
  345.   LINE (596,9)-(610,159),1,bf
  346.   prozent=CINT((((qq-fehler)/qq)*100)*10)/10
  347.   LOCATE 22,71:PRINT "      "
  348.   LOCATE 22,77-LEN(STR$(prozent)):PRINT prozent
  349.   LINE (596,159-prozent*1.5)-(610,159),3,bf
  350.   IF uebersetzung$="" THEN richtiganzeige
  351.   FOR warte=1 TO 5000:NEXT warte
  352.   LOCATE 14,28:PRINT SPACE$ (40)
  353.   LOCATE 17,15:PRINT SPACE$ (28)
  354.     
  355. richtiganzeige:
  356.  IF uebersetzung$<>vokabel$(ABS(anzeige-1),reihenfolge(qq)) OR vergl=-1 OR (ko<>K AND vergl>-1 AND vergl<ko) THEN
  357.     LOCATE 11,12:PRINT "="
  358.     LOCATE 14,28:PRINT vokabel$(ABS(anzeige-1),reihenfolge(qq))
  359.     IF tippen=0 THEN
  360.       a$=""
  361.       WHILE a$=""
  362.         a$=INKEY$
  363.       WEND
  364.       IF a$=CHR$(139) OR a$=CHR$(30) THEN fehler=fehler+1:vokabel(reihenfolge(qq))=0
  365.       LOCATE 22,52:PRINT fehler
  366.     END IF
  367.     IF tippen<>0 THEN FOR warte=1 TO 5000:NEXT warte
  368.     LOCATE 14,28:PRINT SPACE$ (40)
  369.     LOCATE 11,12:PRINT " "
  370.  END IF
  371.     
  372.     LOCATE 6,6:PRINT SPACE$(40)
  373. RETURN
  374.  
  375. eing:
  376.   eingabe$=INKEY$:IF eingabe$="" GOTO eing
  377.      GOSUB uebersetzungseingabe
  378.   IF eingabe$=CHR$(13) THEN RETURN
  379.   GOTO eing
  380. uebersetzungseingabe:
  381.     PUT (punktx,punkty),kursor%,XOR :'kursor löschen
  382.     
  383.       IF eingabe$=CHR$(13) THEN RETURN
  384.       
  385.       IF eingabe$=CHR$(8) THEN
  386.         IF spalte%=28 THEN BEEP:PUT (punktx,punkty),kursor%:RETURN
  387.         SCROLL (punktx-8,punkty)-(536,punkty+8),-8,0
  388.         uebersetzung$=LEFT$(uebersetzung$,spalte%-29)+RIGHT$(uebersetzung$,LEN(uebersetzung$)-spalte%+28)
  389.         spalte%=spalte%-1:punktx=punktx-8:LOCATE zeile%,spalte%:PUT (punktx,punkty),kursor%:RETURN
  390.       END IF
  391.     
  392.       IF eingabe$=CHR$(127) THEN
  393.         IF spalte%=LEN(uebersetzung$)+28 THEN BEEP:PUT(punktx,punkty),kursor%:RETURN
  394.         SCROLL(punktx,punkty)-(536,punkty+8),-8,0
  395.         uebersetzung$=LEFT$(uebersetzung$,spalte%-28)+RIGHT$(uebersetzung$,LEN(uebersetzung$)-spalte%+27)
  396.         PUT (punktx,punkty),kursor%:RETURN
  397.       END IF
  398.  
  399.   ' Kursortasten:  
  400.     IF eingabe$=CHR$(28) THEN BEEP:PUT (punktx,punkty),kursor%:RETURN
  401.     IF eingabe$=CHR$(29) THEN BEEP:PUT (punktx,punkty),kursor%:RETURN
  402.  
  403.     IF eingabe$=CHR$(30) THEN
  404.      IF spalte%-27=LEN(uebersetzung$)+1 THEN BEEP:PUT (punktx,punkty),kursor%:RETURN
  405.      IF spalte%-27<=LEN(uebersetzung$) THEN spalte%=spalte%+1:punktx=punktx+8:LOCATE zeile%,spalte%:PUT (punktx,punkty),kursor%:RETURN
  406.     END IF
  407.     IF eingabe$=CHR$(31) THEN 
  408.       IF spalte%-27=1 THEN BEEP:PUT (punktx,punkty),kursor%:RETURN
  409.       IF spalte%>1 THEN spalte%=spalte%-1:punktx=punktx-8:LOCATE zeile%,spalte%:PUT (punktx,punkty),kursor%:RETURN
  410.      END IF    
  411.  
  412. 'Sonderzeichen (franz.):
  413.     IF eingabe$="µ" THEN eingabe$=CHR$(251)
  414.     IF eingabe$="ø" THEN eingabe$=CHR$(244)
  415.     IF eingabe$="æ" THEN eingabe$=CHR$(226)
  416.     IF eingabe$="©" THEN eingabe$=CHR$(235)
  417.     IF eingabe$="¡" THEN eingabe$=CHR$(238)
  418.  
  419.     IF spalte%-27<=LEN(uebersetzung$) THEN
  420.       SCROLL (punktx,punkty)-(536,punkty+8),8,0
  421.       uebersetzung$=LEFT$(uebersetzung$,spalte%-28)+eingabe$+RIGHT$(uebersetzung$,LEN(uebersetzung$)-(spalte%-28))
  422.       PRINT eingabe$;
  423.       punktx=punktx+8:spalte%=spalte%+1
  424.       PUT (punktx,punkty),kursor%
  425.       RETURN
  426.     END IF
  427.  
  428.     punktx=punktx+8
  429.     spalte%=spalte%+1
  430.     PRINT eingabe$;
  431.     PUT (punktx,punkty),kursor%
  432.     IF LEN (uebersetzung$)>=spalte%-28 THEN MID$(uebersetzung$,spalte%-28)=eingabe$:RETURN
  433.     uebersetzung$=uebersetzung$+eingabe$
  434.       
  435. RETURN
  436.  
  437. '**********************************************************
  438.  
  439. VOKABELEDITOR: '(Version 1.51)
  440.  
  441. phase%=3:MENU 3,0,1:MENU 4,0,1
  442. WINDOW 2,"Deutsch",(319,0)-(631,242),16,1
  443. WINDOW 1,"Fremdsprache   Vok-Nr: 1",(0,0)-(312,242),16,1
  444.  
  445. GOSUB Vokabelschreib
  446.  
  447. abfrage:
  448.   eingabe$=INKEY$:IF eingabe$="" GOTO abfrage
  449.   esctest:
  450.     IF eingabe$=CHR$(27) THEN
  451.       WINDOW CLOSE 1:WINDOW CLOSE 2
  452.       MENU 3,0,0:MENU 4,0,0
  453.       RETURN
  454.     END IF
  455.  
  456.    GOSUB fremdsprache
  457.  GOTO abfrage
  458.  
  459. '#####    
  460.  
  461. Vokabelschreib:
  462.   FOR q=1 TO 30
  463.     WINDOW OUTPUT 2
  464.     LOCATE q,1:CALL text(WINDOW(8),SADD(vokabel$(1,q)),LEN(vokabel$(1,q)))
  465.     WINDOW OUTPUT 1
  466.     LOCATE q,1:CALL text(WINDOW(8),SADD(vokabel$(0,q)),LEN(vokabel$(0,q)))
  467.   NEXT
  468.   LOCATE 1,1
  469.   zeile%=1:spalte%=1:punktx=0:punkty=0
  470.   sprache%=0:nummer%=1 'fuer Vokabel$
  471.   PUT (punktx,punkty),kursor%
  472. RETURN
  473.  
  474. fremdsprache:
  475.     PUT (punktx,punkty),kursor%,XOR :'kursor löschen
  476.     
  477.       IF eingabe$=CHR$(13) THEN 
  478.         IF nummer%>=ende THEN ende=nummer%+1
  479.         IF sprache%=1 THEN 
  480.           WINDOW OUTPUT 1:LOCATE zeile%,spalte%:sprache%=0
  481.           IF zeile%<30 THEN spalte%=1:zeile%=zeile%+1:nummer%=nummer%+1:punktx=0:punkty=punkty+8:LOCATE zeile%,spalte%:PUT (punktx,punkty),kursor%:GOSUB FTitel:RETURN ELSE GOTO scrolloben
  482.         END IF
  483.         IF zeile%<30 THEN spalte%=1:zeile%=zeile%+1:nummer%=nummer%+1:punktx=0:punkty=punkty+8:LOCATE zeile%,spalte%:PUT (punktx,punkty),kursor%:GOSUB FTitel:RETURN ELSE GOTO scrolloben
  484.       END IF
  485.       
  486.       IF eingabe$=CHR$(8) THEN
  487.         IF spalte%=1 THEN BEEP:PUT (punktx,punkty),kursor%:RETURN
  488.         SCROLL (punktx-8,punkty)-(312,punkty+7),-8,0
  489.         vokabel$(sprache%,nummer%)=LEFT$(vokabel$(sprache%,nummer%),spalte%-2)+RIGHT$(vokabel$(sprache%,nummer%),LEN(vokabel$(sprache%,nummer%))-spalte%+1)
  490.         spalte%=spalte%-1:punktx=punktx-8:LOCATE zeile%,spalte%:PUT (punktx,punkty),kursor%:RETURN
  491.       END IF
  492.     
  493.       IF eingabe$=CHR$(127) THEN
  494.         IF spalte%=LEN(vokabel$(sprache%,nummer%))+1 THEN BEEP:PUT(punktx,punkty),kursor%:RETURN
  495.         SCROLL(punktx,punkty)-(312,punkty+7),-8,0
  496.         vokabel$(sprache%,nummer%)=LEFT$(vokabel$(sprache%,nummer%),spalte%-1)+RIGHT$(vokabel$(sprache%,nummer%),LEN(vokabel$(sprache%,nummer%))-spalte%)
  497.         PUT (punktx,punkty),kursor%:RETURN
  498.       END IF
  499.  
  500.       IF eingabe$=CHR$(9) THEN
  501.         IF sprache%=0 THEN WINDOW OUTPUT 2:sprache%=1:eingabe$="":spalte%=1:punktx=0:PUT (punktx,punkty),kursor%:LOCATE zeile%,spalte%:RETURN
  502.         IF sprache%=1 THEN WINDOW OUTPUT 1:sprache%=0:eingabe$="":spalte%=1:punktx=0:PUT (punktx,punkty),kursor%:LOCATE zeile%,spalte%:RETURN
  503.       END IF
  504.  
  505.   ' Kursortasten:  
  506.     IF eingabe$=CHR$(28) THEN 
  507.         IF nummer%=1 THEN BEEP:PUT (punktx,punkty),kursor%:RETURN  
  508.         IF LEN(vokabel$(sprache%,nummer%-1))<spalte%-1 THEN spalte%=LEN(vokabel$(sprache%,nummer%-1))+1:punktx=LEN(vokabel$(sprache%,nummer%-1))*8
  509.         IF zeile%=1 THEN GOTO scrollunten
  510.         nummer%=nummer%-1:zeile%=zeile%-1:punkty=punkty-8
  511.         LOCATE zeile%,spalte%:PUT (punktx,punkty),kursor%:GOSUB FTitel:RETURN
  512.       END IF  
  513.    
  514.     IF eingabe$=CHR$(29) THEN 
  515.       IF nummer%=ende THEN BEEP:PUT (punktx,punkty),kursor%:RETURN
  516.       IF LEN(vokabel$(sprache%,nummer%+1))<spalte%-1 THEN spalte%=LEN(vokabel$(sprache%,nummer%+1))+1:punktx=LEN(vokabel$(sprache%,nummer%+1))*8
  517.       IF zeile%=30 THEN GOTO scrolloben
  518.       zeile%=zeile%+1:punkty=punkty+8:nummer%=nummer%+1
  519.       LOCATE zeile%,spalte%:PUT (punktx,punkty),kursor%:GOSUB FTitel:RETURN 
  520.      
  521.     END IF
  522.     
  523.     IF eingabe$=CHR$(30) THEN
  524.      IF spalte%=LEN(vokabel$(sprache%,nummer%))+1 THEN BEEP:PUT (punktx,punkty),kursor%:RETURN
  525.      IF spalte%<=LEN(vokabel$(sprache%,nummer%)) THEN spalte%=spalte%+1:punktx=punktx+8:LOCATE zeile%,spalte%:PUT (punktx,punkty),kursor%:RETURN
  526.     END IF
  527.     IF eingabe$=CHR$(31) THEN 
  528.       IF spalte%=1 THEN BEEP:PUT (punktx,punkty),kursor%:RETURN
  529.       IF spalte%>1 THEN spalte%=spalte%-1:punktx=punktx-8:LOCATE zeile%,spalte%:PUT (punktx,punkty),kursor%:RETURN
  530.      END IF    
  531.  
  532.   'Funktionstasten:
  533.     IF eingabe$=CHR$(129) THEN start=1:GOSUB scrolling:RETURN
  534.     IF eingabe$=CHR$(130) THEN start=ende-29:GOSUB scrolling:RETURN
  535.     IF eingabe$=CHR$(132) THEN start=nummer%-zeile%-29:GOSUB scrolling:RETURN
  536.     IF eingabe$=CHR$(133) THEN start=nummer%-zeile%+31:GOSUB scrolling:RETURN
  537.     IF eingabe$=CHR$(134) THEN GOSUB einfuegen:RETURN
  538.     IF eingabe$=CHR$(135) THEN GOSUB loeschen:RETURN
  539.     IF eingabe$=CHR$(138) THEN
  540.       IF einfueg=0 THEN einfueg=1:MENU 4,1,2 ELSE einfueg=0:MENU 4,1,1
  541.       PUT (punktx,punkty),kursor%:RETURN
  542.     END IF
  543.  
  544.   'Sonderzeichen (franz.):
  545.     IF eingabe$="µ" THEN eingabe$=CHR$(251)
  546.     IF eingabe$="ø" THEN eingabe$=CHR$(244)
  547.     IF eingabe$="æ" THEN eingabe$=CHR$(226)
  548.     IF eingabe$="©" THEN eingabe$=CHR$(235)
  549.     IF eingabe$="¡" THEN eingabe$=CHR$(238)
  550.  
  551.     IF spalte%<=LEN(vokabel$(sprache%,nummer%)) THEN
  552.       IF einfueg=1 THEN
  553.         SCROLL (punktx,punkty)-(312,punkty+7),8,0
  554.         vokabel$(sprache%,nummer%)=LEFT$(vokabel$(sprache%,nummer%),spalte%-1)+eingabe$+RIGHT$(vokabel$(sprache%,nummer%),LEN(vokabel$(sprache%,nummer%))-spalte%+1)
  555.         PRINT eingabe$;
  556.         punktx=punktx+8:spalte%=spalte%+1
  557.         PUT (punktx,punkty),kursor%
  558.         RETURN
  559.       END IF
  560.     END IF
  561.  
  562.     punktx=punktx+8
  563.     spalte%=spalte%+1
  564.     PRINT eingabe$;
  565.     PUT (punktx,punkty),kursor%
  566.     IF LEN (vokabel$(sprache%,nummer%))>=spalte%-1 THEN MID$(vokabel$(sprache%,nummer%),spalte%-1)=eingabe$:RETURN
  567.     
  568.     vokabel$(sprache%,nummer%)=vokabel$(sprache%,nummer%)+eingabe$
  569.   RETURN
  570.  
  571. scrolloben:
  572.     nummer%=nummer%+1
  573.     fenster=WINDOW(1)
  574.     WINDOW OUTPUT 1
  575.     SCROLL (0,0)-(312,242),0,-8
  576.     LOCATE 30,1:CALL text(WINDOW(8),SADD(vokabel$(0,nummer%)),LEN(vokabel$(0,nummer%)))
  577.     WINDOW OUTPUT 2
  578.     SCROLL (0,0)-(312,242),0,-8
  579.     LOCATE 30,1:CALL text(WINDOW(8),SADD(vokabel$(1,nummer%)),LEN(vokabel$(1,nummer%)))
  580.     WINDOW OUTPUT fenster
  581.     IF eingabe$=CHR$(13) THEN punktx=0:spalte%=1
  582.     punkty=232
  583.     zeile%=30
  584.     PUT (punktx,punkty),kursor%    
  585.     GOSUB FTitel
  586.     LOCATE zeile%,spalte%
  587. RETURN
  588.    
  589. scrollunten:
  590.     nummer%=nummer%-1
  591.     fenster=WINDOW(1)
  592.     WINDOW OUTPUT 1
  593.     SCROLL (0,0)-(312,242),0,8
  594.     LOCATE 1,1:CALL text(WINDOW(8),SADD(vokabel$(0,nummer%)),LEN(vokabel$(0,nummer%)))
  595.     WINDOW OUTPUT 2
  596.     SCROLL (0,0)-(312,242),0,8
  597.     LOCATE 1,1:CALL text(WINDOW(8),SADD(vokabel$(1,nummer%)),LEN(vokabel$(1,nummer%)))
  598.     WINDOW OUTPUT fenster
  599.     punkty=0:zeile%=1
  600.     PUT (punktx,punkty),kursor% 
  601.     GOSUB FTitel
  602.     LOCATE zeile%,spalte%
  603.   RETURN
  604.  
  605. scrolling:
  606.   IF start=-29 OR start>ende THEN BEEP:PUT (punktx,punkty),kursor%:RETURN
  607.   IF start<1 THEN start=1
  608.   WINDOW OUTPUT 1:CLS
  609.   WINDOW OUTPUT 2:CLS
  610.   FOR q=1 TO 30
  611.     WINDOW OUTPUT 2
  612.     LOCATE q,1:CALL text(WINDOW(8),SADD(vokabel$(1,start+q-1)),LEN(vokabel$(1,start+q-1)))
  613.     WINDOW OUTPUT 1
  614.     LOCATE q,1:CALL text(WINDOW(8),SADD(vokabel$(0,start+q-1)),LEN(vokabel$(0,start+q-1)))
  615.   NEXT
  616.   LOCATE 1,1
  617.   zeile%=1:spalte%=1:punktx=0:punkty=0
  618.   sprache%=0:nummer%=start 'fuer Vokabel$
  619.   PUT (punktx,punkty),kursor%
  620.   GOSUB FTitel
  621. RETURN
  622.  
  623. FTitel:
  624.   fenster=WINDOW(1):WINDOW OUTPUT 1
  625.   wt$="Fremdsprache   Vok-Nr:"+STR$(nummer%)+CHR$(0):st$=CHR$(0)
  626.   CALL SetWindowTitles(WINDOW(7),SADD(wt$),SADD(st$))
  627.   WINDOW OUTPUT fenster
  628. RETURN
  629.  
  630. einfuegen:
  631.   FOR qq=ende TO nummer% STEP -1
  632.     SWAP vokabel$(sprache%,qq),vokabel$(sprache%,qq+1)
  633.   NEXT
  634.   SCROLL(0,zeile%*8-8)-(312,242),0,8
  635.   ende=ende+1:spalte%=1:punktx=0
  636.   IF vokabel$(0,ende)="" AND vokabel$(1,ende)="" THEN ende=ende-1
  637.   PUT (punktx,punkty),kursor%:LOCATE zeile%,spalte%
  638. RETURN
  639.  
  640. loeschen:
  641.   FOR qq=nummer% TO ende
  642.     SWAP vokabel$(sprache%,qq),vokabel$(sprache%,qq+1)
  643.   NEXT
  644.   vokabel$(sprache%,ende+1)="":spalte%=1:punktx=0
  645.   IF vokabel$(0,ende)="" AND vokabel$(1,ende)="" THEN ende=ende-1
  646.   SCROLL (0,zeile%*8-8)-(312,242),0,-8
  647.   LOCATE 30,1:CALL text(WINDOW(8),SADD(vokabel$(sprache%,30-zeile%+nummer%)),LEN(vokabel$(sprache%,30-zeile%+nummer%)))
  648.   IF nummer%>ende THEN nummer%=nummer%-1:zeile%=zeile%-1:punkty=punkty-8
  649.   PUT (punktx,punkty),kursor%:LOCATE zeile%,spalte%
  650. RETURN
  651.   
  652. '*************************************************************
  653.  
  654. ALLGEMEINE_UNTERPROGRAMME: '(Version 3.01)
  655.  
  656. Initmenu:
  657.   MENU 1,0,1,"Steuerung"
  658.   MENU 1,1,1,"Abbruch  "
  659.   MENU 1,2,1,"Menue    "
  660.   MENU 1,3,1,"Ende     "
  661.  
  662.   MENU 2,0,1,"Vokabeln"
  663.   MENU 2,1,1,"Neu          "
  664.   MENU 2,2,1,"Laden        "
  665.   MENU 2,3,1,"Speichern    "
  666.   MENU 2,4,1,"Speichern als"
  667.   MENU 2,5,1,"Anfügen      "
  668.   MENU 2,6,1,"Space-Check  "
  669.  
  670.   MENU 3,0,0,"Scrolling"
  671.   MENU 3,1,1,"Erste Seite     F1"
  672.   MENU 3,2,1,"Letzte Seite    F2"
  673.   MENU 3,3,1,"Vorherige Seite F4"
  674.   MENU 3,4,1,"Nächste Seite   F5"
  675.  
  676.   MENU 4,0,0,"Editor"
  677.   MENU 4,1,2,"   Einfüge-Modus  F10"
  678.   MENU 4,2,1,"   Zeile einfügen F6 "
  679.   MENU 4,3,1,"   Zeile löschen  F7 "
  680. RETURN
  681.  
  682. Menuwahl:
  683.   Menutitel=MENU(0):Menupunkt=MENU(1)
  684.   IF Menutitel=1 THEN
  685.     IF Menupunkt=1 THEN
  686.       IF phase%=3 THEN eingabe$=CHR$(27):RETURN esctest
  687.       IF phase%=2 THEN RETURN LERNEN
  688.     END IF
  689.     IF Menupunkt=2 THEN IF phase%=2 THEN MENU 2,2,1:RETURN HAUPTPROGRAMM
  690.     IF Menupunkt=3 THEN GOSUB Schluss
  691.   END IF
  692.   IF Menutitel=2 THEN
  693.     IF Menupunkt=1 THEN
  694.       text$(1)="Eventuell sind die sich im Speicher":text$(2)="befindlichen Vokabeln nicht auf":text$(3)="Diskette abgespeichert worden.":text$(4)="Wollen Sie sie wirklich löschen?"
  695.       CALL Requester (3,"Programm Request:",text$()," Ja ","Nein")
  696.       IF request=1 THEN
  697.          FOR a=0 TO ende:vokabel$(0,a)="":vokabel$(1,a)="":NEXT
  698.          ende=1:datei$=""
  699.          IF phase%=3 THEN nummer%=1:zeile%=1:spalte%=1:punktx=0:punkty=0:WINDOW OUTPUT 2:CLS:WINDOW OUTPUT 1:CLS:PUT (punktx,punkty),kursor%
  700.        END IF
  701.     END IF
  702.     IF Menupunkt=2 THEN
  703.       CALL Filerequester (3,"Vokabeln laden:"," Mit Schublade (Franz,Engl,Latein)",datei$," OK ","Abbruch")
  704.       IF request=1 THEN GOSUB Laden ELSE RETURN
  705.       IF phase%=3 THEN WINDOW OUTPUT 2:CLS:WINDOW OUTPUT 1:CLS:GOSUB Vokabelschreib
  706.       IF phase%=2 THEN CLS:Ueberschrift$="Lernen":GOSUB Ueberschrift:GOSUB LernenMenu
  707.     END IF
  708.     IF Menupunkt=3 THEN
  709.       IF datei$="" THEN
  710.         CALL Filerequester (3,"Vokabeln speichern:","Mit Schublade (Franz,Engl,Latein)",datei$," OK ","Abbruch")
  711.         IF request=2 THEN RETURN
  712.       END IF
  713.       GOSUB Speichern
  714.     END IF  
  715.     IF Menupunkt=4 THEN GOSUB Speichfrag
  716.     IF Menupunkt=5 THEN
  717.       CALL Filerequester (3,"Vokabeln anfügen:","Mit Schublade (Franz,Engl,Latein)",datei$," OK ","Abbruch")
  718.       IF request=1 THEN GOSUB Anfuegen ELSE RETURN
  719.       IF phase%=3 THEN start=nummer%-zeile%+1:GOSUB scrolling
  720.     END IF
  721.     IF Menupunkt=6 THEN GOSUB SpaceCheck
  722.   END IF
  723.   IF Menutitel=3 THEN
  724.     PUT (punktx,punkty),kursor%,XOR
  725.     IF Menupunkt=1 THEN start=1
  726.     IF Menupunkt=2 THEN start=ende-29
  727.     IF Menupunkt=3 THEN start=nummer%-zeile%-29
  728.     IF Menupunkt=4 THEN start=nummer%-zeile%+31
  729.     GOSUB scrolling
  730.   END IF
  731.   IF Menutitel=4 THEN
  732.     IF Menupunkt=1 THEN
  733.       IF einfueg=1 THEN einfueg=0:MENU 4,1,1 ELSE einfueg=1:MENU 4,1,2
  734.     END IF
  735.     IF Menupunkt=2 THEN PUT (punktx,punkty),kursor%,XOR:GOSUB einfuegen
  736.     IF Menupunkt=3 THEN PUT (punktx,punkty),kursor%,XOR:GOSUB loeschen
  737.   END IF
  738. RETURN
  739.     
  740. Ueberschrift:   'ueberschrift$ uebergeben
  741.   CALL CPL (60):PRINT:POKE WINDOW(8)+56,3
  742.   PRINT TAB((63-LEN(Ueberschrift$))/2);Ueberschrift$
  743.   POKE WINDOW(8)+56,0:CALL CPL(80)
  744. RETURN
  745. SUB CPL (Chars%) STATIC
  746.   IF Chars%=60 THEN Height%=9 ELSE Height%=8
  747.   IF FontInfo&<>0 THEN CALL CloseFont(FontInfo&)
  748.   Font$="topaz.font"+CHR$(0)
  749.   Font&(0)=SADD(Font$):Font&(1)=Height%*2^16
  750.   FontInfo&=OpenFont&(VARPTR(Font&(0)))
  751.   IF FontInfo&<>0 THEN CALL SetFont(WINDOW(8),FontInfo&)
  752. END SUB
  753.  
  754. SUB Filerequester (kennung%,titel$,text$,uebergabe$,wahl1$,wahl2$) STATIC
  755. SHARED request
  756. request=0
  757.  
  758. 'text$ : maximal 35 Buchstaben ; uebergabe$ : maximal 31 Buchstaben
  759.  
  760. WINDOW kennung%,titel$,(0,0)-(298,59),22,1
  761. DIM kursor%(19)
  762. zeile%=3:spalte%=4
  763. LINE (0,0)-(7,7),2,bf
  764. GET (0,0)-(7,7),kursor%
  765. punktx=24:punkty=16
  766.  
  767. COLOR 0,1:CLS
  768. PRINT TAB(2)text$
  769. LOCATE 3,4:PRINT uebergabe$
  770. LINE (20,14)-(276,26),0,b
  771. PUT (punktx,punkty),kursor%
  772. LOCATE 6,3:PRINT wahl1$
  773. LOCATE 6,36-LEN(wahl2$):PRINT wahl2$
  774.   x1=8:y1=36:x2=(3+LEN(wahl1$))*8:y2=52
  775.   x3=(34-LEN(wahl2$))*8:x4=288
  776.   LINE (x1,y1)-(x2,y2),3,b
  777.   LINE (x3,y1)-(x4,y2),3,b
  778. LOCATE 3,4:maus=MOUSE(0) 
  779. maus:
  780.   eingabe$=INKEY$:IF eingabe$="" AND MOUSE(0)<=0 THEN maus
  781.   IF eingabe$<>"" THEN GOSUB Buchst:GOTO maus
  782.   IF MOUSE (6)>y1 AND MOUSE (6)<y2 THEN
  783.     IF MOUSE (5)>x1 AND MOUSE (5)<x2 THEN request=1
  784.     IF MOUSE (5)>x3 AND MOUSE (5)<x4 THEN request=2
  785.   END IF
  786.   IF request=0 THEN maus
  787. Tschuess:
  788. WINDOW CLOSE kennung%
  789. ERASE kursor%
  790. EXIT SUB
  791.  
  792. Buchst:
  793.   PUT (punktx,punkty),kursor%,XOR :'kursor löschen
  794.     IF eingabe$=CHR$(27) THEN
  795.       LOCATE 3,4:PRINT SPACE$(31):uebergabe$=""
  796.       punktx=24:punkty=16:zeile%=3:spalte%=4
  797.       PUT (punktx,punkty),kursor%:LOCATE 3,4
  798.       RETURN
  799.     END IF
  800.     IF eingabe$=CHR$(13) THEN request=1:RETURN Tschuess
  801.     IF eingabe$=CHR$(8) THEN
  802.       IF spalte%=4 THEN BEEP:PUT (punktx,punkty),kursor%:RETURN
  803.       SCROLL (punktx-8,punkty)-(272,punkty+8),-8,0
  804.       uebergabe$=LEFT$(uebergabe$,spalte%-5)+RIGHT$(uebergabe$,LEN(uebergabe$)-spalte%+4)
  805.       spalte%=spalte%-1:punktx=punktx-8:LOCATE zeile%,spalte%:PUT (punktx,punkty),kursor%:RETURN
  806.     END IF
  807.     
  808.     IF eingabe$=CHR$(127) THEN
  809.       IF spalte%=LEN(uebergabe$)+4 THEN BEEP:PUT(punktx,punkty),kursor%:RETURN
  810.       SCROLL(punktx,punkty)-(272,punkty+8),-8,0
  811.       uebergabe$=LEFT$(uebergabe$,spalte%-4)+RIGHT$(uebergabe$,LEN(uebergabe$)-spalte%+3)
  812.       PUT (punktx,punkty),kursor%:RETURN
  813.     END IF
  814.   IF eingabe$=CHR$(28) THEN BEEP:PUT (punktx,punkty),kursor%:RETURN
  815.   IF eingabe$=CHR$(29) THEN BEEP:PUT (punktx,punkty),kursor%:RETURN
  816.   IF eingabe$=CHR$(30) THEN
  817.    IF spalte%-3=LEN(uebergabe$)+1 THEN BEEP:PUT (punktx,punkty),kursor%:RETURN
  818.    spalte%=spalte%+1:punktx=punktx+8:LOCATE zeile%,spalte%:PUT (punktx,punkty),kursor%:RETURN
  819.   END IF
  820.   IF eingabe$=CHR$(31) THEN 
  821.     IF spalte%=4 THEN BEEP:PUT (punktx,punkty),kursor%:RETURN
  822.     IF spalte%>1 THEN spalte%=spalte%-1:punktx=punktx-8:LOCATE zeile%,spalte%:PUT (punktx,punkty),kursor%:RETURN
  823.    END IF    
  824.  
  825.   IF spalte%=34 THEN BEEP:PUT(punktx,punkty),kursor%:RETURN
  826.   IF spalte%-3<=LEN(uebergabe$) THEN
  827.     SCROLL (punktx,punkty)-(272,punkty+8),8,0
  828.     uebergabe$=LEFT$(uebergabe$,spalte%-4)+eingabe$+RIGHT$(uebergabe$,LEN(uebergabe$)-(spalte%-4))
  829.     PRINT eingabe$;
  830.     punktx=punktx+8:spalte%=spalte%+1
  831.     PUT (punktx,punkty),kursor%
  832.     RETURN
  833.   END IF
  834.  
  835.     punktx=punktx+8
  836.     spalte%=spalte%+1
  837.     PRINT eingabe$;
  838.     PUT (punktx,punkty),kursor%
  839.     IF LEN (uebergabe$)>=spalte%-4 THEN MID$(uebergabe$,spalte%-4)=eingabe$:RETURN
  840.     uebergabe$=uebergabe$+eingabe$
  841. RETURN
  842.  
  843. END SUB
  844.  
  845. Laden:
  846.   FOR qq=1 TO ende:vokabel$(0,qq)="":vokabel$(1,qq)="":NEXT
  847.   ende=0
  848.   OPEN "daten/"+datei$ FOR INPUT AS #1
  849.   WHILE NOT EOF(1)
  850.    ende=ende+1
  851.    LINE INPUT #1,vokabel$(0,ende)
  852.    LINE INPUT #1,vokabel$(1,ende)
  853.   WEND
  854.   CLOSE 1
  855. RETURN
  856.  
  857. Speichfrag:
  858.   CALL Filerequester (3,"Vokabeln speichern:","Mit Schublade (Franz,Engl,Latein)",datei$," OK ","Abbruch")
  859.   IF request=1 THEN GOSUB Speichern
  860. RETURN
  861. Speichern:
  862.   OPEN "daten/"+datei$ FOR APPEND AS #1
  863.   IF LOF(1)<>0 AND Menupunkt=4 THEN
  864.     text$(1)="Es existiert bereits eine Datei mit":text$(2)="diesem Namen auf der Diskette.":text$(3)="Datei anfügen bzw drüberschreiben":text$(4)="oder neuen Dateinamen eingeben?"
  865.     CALL Requester(3,"Diskettenfehler",text$(),"Anfügen/Überschr.","Neuer Name")
  866.     IF request=2 THEN CLOSE 1:RETURN Speichfrag
  867.     text$(1)="Wollen Sie nun ihre Daten an die":text$(2)="Datei auf der Diskette anfügen":text$(3)="oder die Datei auf der Diskette":text$(4)="überschreiben (und damit löschen)?"
  868.     CALL Requester(3,"Fehlervokabeln speichern",text$(),"Anfügen","Überschreiben")
  869.     IF request=2 THEN CLOSE 1:OPEN "daten/"+datei$ FOR OUTPUT AS #1
  870.   END IF
  871.   IF Menupunkt=3 THEN CLOSE 1:OPEN "daten/"+datei$ FOR OUTPUT AS #1
  872.   FOR qq=1 TO ende
  873.     IF vokabel$(0,qq)="" AND vokabel$(1,qq)="" THEN Schleifeweiter
  874.     PRINT #1,vokabel$(0,qq)
  875.     PRINT #1,vokabel$(1,qq)
  876.  Schleifeweiter:
  877.   NEXT qq
  878.   CLOSE 1
  879. RETURN
  880.  
  881. Anfuegen:
  882.   OPEN "daten/"+datei$ FOR INPUT AS #1
  883.   WHILE NOT EOF(1)
  884.    ende=ende+1
  885.    LINE INPUT #1,vokabel$(0,ende)
  886.    LINE INPUT #1,vokabel$(1,ende)
  887.   WEND
  888.   CLOSE 1
  889. RETURN
  890.  
  891. Fehlerspeichern:
  892.   OPEN "daten/"+Fehlerdatei$ FOR APPEND AS #1
  893.   IF LOF(1)<>0 THEN
  894.     text$(1)="Es existiert bereits eine Datei mit":text$(2)="diesem Namen auf der Diskette.":text$(3)="Datei anfügen bzw drüberschreiben":text$(4)="oder neuen Dateinamen eingeben?"
  895.     CALL Requester(3,"Diskettenfehler",text$(),"Anfügen/Überschr.","Neuer Name")
  896.     IF request=2 THEN CLOSE 1:RETURN Fehlspeichfrag
  897.     text$(1)="Wollen Sie nun ihre Daten an die":text$(2)="Datei auf der Diskette anfügen":text$(3)="oder die Datei auf der Diskette":text$(4)="überschreiben (und damit löschen)?"
  898.     CALL Requester(3,"Fehlervokabeln speichern",text$(),"Anfügen","Überschreiben")
  899.     IF request=2 THEN CLOSE 1:OPEN "daten/"+Fehlerdatei$ FOR OUTPUT AS #1
  900.   END IF
  901.   FOR qq=1 TO ende
  902.     IF vokabel(qq)=0 THEN
  903.       PRINT #1,vokabel$(0,qq)
  904.       PRINT #1,vokabel$(1,qq)
  905.     END IF
  906.   NEXT
  907.   CLOSE 1
  908. RETURN
  909.  
  910. Mauswahl:
  911.   maus=MOUSE(0):mausx=MOUSE(3):mausy=MOUSE(4)
  912.   ON phase% GOTO Hauptmenueauswahl,taste
  913. RETURN
  914.  
  915. SUB Requester (kennung%,titel$,text$(4),wahl1$,wahl2$) STATIC
  916. SHARED request
  917. request=0
  918.  
  919. 'pro Zeile = maximal 35 Buchstaben, Beide Schalter = maximal 30 Buchstaben
  920.  
  921. WINDOW kennung%,titel$,(0,0)-(298,59),22,1
  922. COLOR 0,1:CLS
  923. FOR a=1 TO 4
  924.   PRINT TAB(2)text$(a)
  925. NEXT
  926. LOCATE 6,3:PRINT wahl1$
  927. LOCATE 6,36-LEN(wahl2$):PRINT wahl2$
  928.   x1=8:y1=36:x2=(3+LEN(wahl1$))*8:y2=52
  929.   x3=(34-LEN(wahl2$))*8:x4=288
  930.   LINE (x1,y1)-(x2,y2),3,b
  931.   LINE (x3,y1)-(x4,y2),3,b
  932.   m=MOUSE(0)
  933. ms:
  934.   WHILE MOUSE(0)<=0
  935.   SLEEP
  936.   WEND
  937.   IF MOUSE (6)>y1 AND MOUSE (6)<y2 THEN
  938.     IF MOUSE (5)>x1 AND MOUSE (5)<x2 THEN request=1
  939.     IF MOUSE (5)>x3 AND MOUSE (5)<x4 THEN request=2
  940.   END IF
  941.   IF request=0 THEN ms
  942. WINDOW CLOSE kennung%  
  943.  
  944. END SUB
  945.  
  946. Schluss:
  947.   text$(1)="ACHTUNG!":text$(2)="Alle sich im Speicher befindlichen":text$(3)="Daten gehen bei Programmabbruch":text$(4)="verloren."
  948.   CALL Requester (3,"Programm Request:",text$(),"Ende !","Zurück ins Programm")
  949.   IF request=1 THEN SYSTEM
  950. RETURN
  951.  
  952. Fehlerbearbeitung:
  953.   BEEP
  954.   FOR a=1 TO 4:text$(a)="":NEXT
  955.  
  956.   IF ERR=64 THEN text$(2)="Der Dateiname entspricht nicht den":text$(3)="Amiga-Konventionen"
  957.   IF ERR=61 THEN text$(2)="Die Diskette ist voll!"
  958.   IF ERR=53 THEN text$(2)="Eine Datei mit diesem Namen":text$(3)="existiert auf der Diskette nicht"
  959.   IF ERR=7 THEN text$(2)="Zu wenig Speicher vorhanden!"
  960.   
  961.   IF text$(2)<>"" THEN CALL Requester (3,"FEHLER !!!",text$(),"Weiter","Weiter")
  962. RESUME NEXT
  963.  
  964. SpaceCheck:
  965.   WINDOW 3,"Space-Check",(240,50)-(400,80),2,1
  966.   PRINT " Bitte warten ...":LINE (5,15)-(156,25),2,b
  967.   FOR b=1 TO ende
  968.     FOR a=0 TO 1 
  969.       kompos=0
  970.       LEnd: IF LEFT$(vokabel$(a,b),1)=" " THEN vokabel$(a,b)=RIGHT$(vokabel$(a,b),LEN(vokabel$(a,b))-1):GOTO LEnd
  971.       REnd: IF RIGHT$(vokabel$(a,b),1)=" " THEN vokabel$(a,b)=LEFT$(vokabel$(a,b),LEN(vokabel$(a,b))-1):GOTO REnd
  972.      Kommacheck: kompos=INSTR(kompos+1,vokabel$(a,b),",")
  973.       IF kompos=0 THEN checkend
  974.       LKomma: IF MID$(vokabel$(a,b),kompos-1,1)=" " THEN vokabel$(a,b)=LEFT$(vokabel$(a,b),kompos-2)+RIGHT$(vokabel$(a,b),LEN(vokabel$(a,b))-kompos+1):kompos=kompos-1:GOTO LKomma
  975.       RKomma: IF MID$(vokabel$(a,b),kompos+1,1)=" " THEN vokabel$(a,b)=LEFT$(vokabel$(a,b),kompos)+RIGHT$(vokabel$(a,b),LEN(vokabel$(a,b))-kompos-1):GOTO RKomma
  976.       GOTO Kommacheck
  977.    checkend:
  978.      LINE (6,16)-(5+150/(2*ende)*b*(a+1),24),3,bf
  979.     NEXT
  980.   NEXT
  981.   WINDOW CLOSE 3
  982.   IF phase%=3 THEN start=nummer%-zeile%+1:GOSUB scrolling
  983. RETURN
  984.  
  985. SUB CreateBox(yPos%,xPos%,text$) STATIC
  986.   LINE (xPos%*8-12,yPos%*8-10)-((LEN(text$)+xPos%)*8+4,yPos%*8+6),2,bf
  987.   LINE (xPos%*8-16,yPos%*8-12)-((LEN(text$)+xPos%)*8,yPos%*8+4),1,bf
  988.   LINE (xPos%*8-16,yPos%*8-12)-((LEN(text$)+xPos%)*8,yPos%*8+4),0,b
  989.   LOCATE yPos%,xPos%:PRINT text$
  990. END SUB
  991.